クロス (ピボット) テーブルをフラット テーブルに変換する必要がある場合があります。この手順は「」と呼ばれます。 データの修正 」
プログラム LibreOffice Calc には、ピボット テーブルを " フラット 」と書かれていますが、対応する手順を自分で書くこともできますので、その方法を見てみましょう。
問題の本質をより明確に理解するために、下の図を見てみましょう。左側には行列形式のテーブル (ピボット テーブル) があり、右側には列を含む通常のテーブル (フラット テーブル) があります。
テーブルを展開するときは、マトリックス テーブル内の列の交差部分である属性と値のペアを解凍し、それらをフラット テーブル内のフラット化された列に再配置します。
メニュー Tools - Macros - Edit Macros... を開き、Module1 を選択して、次のテキストをモジュールにコピーします。
Sub UnPivotTable ' moonexcel.com.ua Dim oBook As Object Dim oActiveSheet As Object Dim oSelRange As Object Dim oNewSheet As Object Dim i As Long Dim iTopLabelRowCount As Integer Dim iSideLabelColCount As Integer oBook = ThisComponent oActiveSheet = oBook.CurrentController.ActiveSheet oSelRange = oBook.CurrentSelection ' 新しいシートを追加する oBook.Sheets.insertNewByName("UnPivoted Table",0) oNewSheet = oBook.Sheets(0) ' ヘッダーのサイズを決定する iTopLabelRowCount = InputBox(" 一番上のヘッダーは何行ですか? ") iSideLabelColCount = InputBox(" サイドヘッダーは何列ですか? ") i = 0 For r = (iTopLabelRowCount + 1) To oSelRange.Rows.Count For c = (iSideLabelColCount + 1) To oSelRange.Columns.Count For j = 1 To iSideLabelColCount oNewSheet.getCellByPosition(j-1, i).Formula = oSelRange.getCellByPosition(j-1, r-1).Formula Next j For k = 1 To iTopLabelRowCount oNewSheet.getCellByPosition(j + k - 2, i).Formula = oSelRange.getCellByPosition(c-1, k-1).Formula Next k oNewSheet.getCellByPosition(j + k - 2, i).Formula = oSelRange.getCellByPosition(c-1, r-1).Formula i = i + 1 Next c Next r End Sub
次に、Macro Editor を閉じて、LibreOffice Calc のワークシートに戻ります。上部と左側のヘッダーを持つテーブル全体を選択し、メニュー Tools - Macros - Run Macro... から新しいマクロを実行します。
マクロは新しい名前付きシートをワークブックに挿入します。
ユーティリティを使用することもできます 「ピボットテーブル (Unpivot)」 拡張機能をインストールすることで YLC_ユーティリティ.oxt 。
その後、このユーティリティは LibreOffice Calc で開かれるすべてのファイルで使用できるようになります。